package sculove.spring.framework.util;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.security.MessageDigest;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * 공통적으로 사용하는 Util성 모듈
 * @author sculove
 *
 */
public class ComUtil {
	/**
	 * 단방향 Encoding. 입력된 문자열을 암호화한다.
	 * <pre>
	 *
	 * </pre>
	 * @param encTarget 암호화할 평문자열
	 * @return 암호화된 HEX 문자열 (32자리)
	 */
	public static String encMD5(String encTarget) {
		byte[] plainText = null; // 평문
		byte[] hashValue = null; // 해쉬 값

		String result = "";
		plainText = encTarget.getBytes();

		// MD5알고리즘을 사용한 메시지 다이제스트를 생성해 해쉬값을 얻는다.
		MessageDigest md;
		try {
			md = MessageDigest.getInstance("MD5");
			hashValue = md.digest(plainText);

			// hash값을 변환한다.
			StringBuffer sb = new StringBuffer();
			for (int i = 0; i < hashValue.length; i++) {
				Character c = new Character((char)(hashValue[i]&0xFF));	// Byte To Char
				sb.append(Integer.toHexString((int) c.charValue()));	// Char To Hex
			}
			result = sb.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 유일한 코드 생성.
	 *
	 * @return 유일한 코드
	 */
	public static String  getUniqueNo()
	{
		Random rand = new Random(System.currentTimeMillis());
		Date date = new Date();
		SimpleDateFormat sdformat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
		DecimalFormat df = new DecimalFormat("0000");
		return sdformat.format(date) + df.format(rand.nextInt(1000)+1);
	}

	/**
	 * 서버 IP 반환
	 * @return 함수를 호출한 컴퓨터의 ip
	 */
	public static String getIpAddr()
	{
		String ip ="";
		InetAddress inetAddr = null;
		try {
			inetAddr = InetAddress.getLocalHost();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		ip = inetAddr.getHostAddress();
		return ip; 
	}
	
	
	/**
	 * 서버 hostname 얻기
	 * @return 함수를 호출한 컴퓨터의 hostname
	 */
	public static String getHostNm()
	{
		String hostnm ="";
		InetAddress inetAddr = null;
		try {
			inetAddr = InetAddress.getLocalHost();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		hostnm = inetAddr.getHostName();
		return hostnm; 
	}
}